package quee;

import com.sun.jmx.remote.internal.ArrayQueue;

import java.util.Queue;

/**
 * 用数组模拟队列的过程
 * queue
 */
public class moni {
    public static void main(String[] args) {
        arrQueue arrQueue = new arrQueue(3);
        char key=' ';
        arrQueue.showQueue();
        arrQueue.addQueue(484);
        arrQueue.addQueue(761);
        arrQueue.addQueue(3);
        arrQueue.addQueue(3);
        arrQueue.showQueue();
   int queue = arrQueue.getQueue();
        System.out.println(queue);
        int i = arrQueue.headQueue();
        System.out.println(i);
        arrQueue.getQueue();
        arrQueue.showQueue();

    }


}

/**
 * 数组模拟队列的类
 */
class arrQueue{

    private int maxSize;
    private int front;//队列头
    private int rear; //队列尾
    /**
     * 存放数据 ，模拟队列
     */
    private int[] arr;//存放数据 ，模拟队列
    //构造器
    public arrQueue(int arrMaxSize){
        maxSize=arrMaxSize;
        arr=new int[maxSize];
        front=-1;//指向队列的头部前一个位置
        rear=-1;//指向队列尾部的具体位置，就是队列最后一个数据的位置
    }
    //判断队列是否满
    public boolean isFull(){
        return  rear==maxSize -1;
    }
    public boolean isEmpty(){
        return rear==front;
    }
    public void addQueue(int n){
        if (isFull()){
            System.out.println("已经满了");
            return;
        }
        //rear后移 因为先进先出 头部分先被取到 添加从尾部开始添加
        rear++;
        arr[rear]=n;
    }
    //获取队列
    public  int getQueue(){

        if (isEmpty()){
            throw new RuntimeException("队列空，不能获取数据");
        }
        //front前移 因为先进先出 头部分先被取到
        front++;
        return arr[front];
    }

    public void showQueue(){
        if (isEmpty()){
            System.out.println("没有数据");
            return;
        }
        for (int i=0;i<arr.length;i++){
            System.out.printf("arr[%d]=%d\n",i,arr[i]);
        }
    }
    /**
     * 显示队列的头部 不是取数据
     */
    public  int headQueue(){
        if (isEmpty()){
            throw new RuntimeException("队列空，不能获取数据");

        }
        return arr[front+1];
    }

}